جزوه · چالش چهارم فصل چهارم · کپی کردن فایل‌ها ← بازگشت به فهرست
📘 چالش چهارم فصل چهارم کپی کردن فایل‌ها
📅 تاریخ: چهارشنبه، ۲۸ مرداد ۱۴۰۵ 👤 مدرس: محمد عابدینی 🐚 Zsh · 🐧 Debian (کالی)
📂 قبل از شروع، یه مثال ساده:

فرض کن یه پوشه داری که توش کلی فایل و زیرپوشه هست. می‌خوای همه اون‌ها رو به یه جای دیگه کپی کنی. با دستور cp -r می‌تونی کل ساختار رو یکجا کپی کنی. حتی می‌تونی فقط فایل‌هایی که جدیدتر هستند رو کپی کنی (با cp -ru). این چالش دقیقاً همین رو بهت یاد میده!

▍ مقدمه

در این چالش، با دستور cp و گزینه‌های مهم آن آشنا می‌شوید. این دستور یکی از پرکاربردترین دستورات در لینوکس است که برای کپی کردن فایل‌ها و دایرکتوری‌ها استفاده می‌شود. در ادامه، با کپی بازگشتی و کپی به‌روزرسانی آشنا می‌شویم.

▍ دستورات اصلی چالش

• کپی بازگشتی با cp -r

cp -r (یا cp -R) برای کپی کردن دایرکتوری‌ها به‌صورت کامل استفاده می‌شود.

┌──(ya3in㉿kali)-[~/test] └─$ cp -r work3/* abedini/

توضیح: work3/* یعنی همه محتویات دایرکتوری work3 (فایل‌ها و زیردایرکتوری‌ها). این محتویات به دایرکتوری abedini کپی می‌شوند.

abedini/ ├── 55/ ├── abedini1 ├── abedini2 ├── abedini3 ├── F1/ │ ├── temp1/ │ └── temp2/ ├── F2/ │ ├── temp3/ │ └── temp4/ └── F3/ ├── abedini1 ├── abedini2 └── abedini3

نتیجه: کل ساختار work3 با زیردایرکتوری‌ها و فایل‌ها در abedini کپی شده است.

💡 گزینه‌های مهم cp -r:
  • -r یا -R → کپی بازگشتی (برای دایرکتوری‌ها)
  • -v → نمایش جزئیات کپی (verbose)
  • -i → قبل از بازنویسی، از کاربر تأیید می‌گیرد
  • -u → فقط فایل‌های جدیدتر را کپی می‌کند (به‌روزرسانی)

• کپی به‌روزرسانی با cp -ru

cp -ru (کپی با به‌روزرسانی) فقط فایل‌هایی را کپی می‌کند که در مقصد جدیدتر هستند یا وجود ندارند.

┌──(ya3in㉿kali)-[~/test] └─$ cp -ru work3/* abedini/

توضیح: این دستور فقط فایل‌هایی را که در work3 جدیدتر از نسخه موجود در abedini هستند، کپی می‌کند.

💡 نکته:

-u مخفف update است و برای پشتیبان‌گیری افزایشی بسیار مفید است.

▍ آماده‌سازی محیط چالش

قبل از کپی کردن، باید فایل‌ها و دایرکتوری‌های مورد نیاز را بسازیم.

• ایجاد دایرکتوری‌ها

┌──(ya3in㉿kali)-[~/test] └─$ mkdir -p work3/F{1/temp{1,2},2/temp{3,4},3/{abedini1,abedini2,abedini3}}

توضیح: این دستور ساختار دایرکتوری‌های work3 را می‌سازد.

• ایجاد فایل‌ها

┌──(ya3in㉿kali)-[~/test/work3] └─$ touch abedini{1..50} └─$ ls | head -10 abedini1
abedini2
abedini3
abedini4
abedini5
abedini6
abedini7
abedini8
abedini9
abedini10

توضیح: ۵۰ فایل خالی با نام‌های abedini1 تا abedini50 در دایرکتوری work3 ساخته می‌شوند.

• مشاهده ساختار نهایی

┌──(ya3in㉿kali)-[~/test] └─$ tree work3/
work3/ ├── 55 ├── abedini1 ├── abedini2 ├── abedini3 ├── F1 │ ├── temp1 │ └── temp2 ├── F2 │ ├── temp3 │ └── temp4 └── F3 ├── abedini1 ├── abedini2 └── abedini3

▍ تمرین برای تثبیت

🧪 چالش شما:

فرض کنید دایرکتوری source با ساختار زیر دارید:

source/ ├── docs/ │ ├── report1.txt │ └── report2.txt └── images/ ├── photo1.jpg └── photo2.jpg

حالا می‌خواهید:

  1. کل دایرکتوری source را به دایرکتوری backup کپی کنید.
  2. بعد از تغییر یک فایل، فقط فایل‌های تغییر یافته را به‌روزرسانی کنید.

دستورات خود را بنویسید:

cp -r ________________________________
cp -ru _______________________________
✅ پاسخ تمرین:
┌──(ya3in㉿kali)-[~] └─$ cp -r source/ backup/ └─$ cp -ru source/ backup/

توضیح: cp -r source/ backup/ کل دایرکتوری source را به backup کپی می‌کند. cp -ru source/ backup/ فقط فایل‌های جدیدتر را به‌روزرسانی می‌کند.

📌 جمع‌بندی:
  • cp -r → کپی بازگشتی (دایرکتوری‌ها و فایل‌ها)
  • cp -ru → کپی به‌روزرسانی (فقط فایل‌های جدیدتر)
  • * → همه محتویات دایرکتوری
  • برای کپی کردن کل ساختار، از cp -r استفاده کنید.
  • برای پشتیبان‌گیری افزایشی، از cp -ru استفاده کنید.